package design.patterns.singlemode;

/**
 * @Description ${DESCRIPTION}.
 * @author: wwchen
 * @DateTime: 2018-06-25 21:22
 */

public class SingleTest {

    public static void main(String[] args) {
        //1:构造方法创建实例(single 只是内存地址的引用，而实例(对象)则是内存中实际存储的那个对象，不能说single是实例或者对象)
        //  可以创建多个实例，虽然都是Single，但是其内存中是不同的对象
        Single single = new Single();
        Single single1 = new Single();
        System.out.println("===============通过构造方法获取实例===============");
        if (single == single1){
            System.out.println("两者是同一个对象");
        }else {
            System.out.println(single.hashCode());
            System.out.println(single1.hashCode());
            System.out.println("两者不是同一个对象");
        }
        //对于只是简单继承Object类equals方法的类库，equals和==的作用是相同的
        if (single.equals(single1)){
            System.out.println("两者是同一个对象");
        }else {
            System.out.println("两者不是同一个对象");
        }

        //2.通过类名直接获取实例
        SingleV1 singleV1 = SingleV1.instance;
        SingleV1 singleV2 = SingleV1.instance;
        System.out.println("===============通过类名获取唯一实例===============");
        if (singleV1 == singleV2){
            System.out.println("两者是同一个对象-");
        }else {
            System.out.println("两者不是同一个对象-");
        }

        //3.通过类的共有方法获取实例
        SingleV1 singleV11 = SingleV1.getInstance1();
        SingleV1 singleV12 = SingleV1.getInstance1();
        System.out.println("===============通过类的公有的方法获取唯一实例===============");
        if (singleV11 == singleV12){
            System.out.println("两者是同一个对象-+");
        }else {
            System.out.println("两者不是同一个对象-");
        }
    }
}
